package top.lishuoboy.logback.a2architecture;

import ch.qos.logback.classic.Level;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * @author ：lishuoboy
 * @date ：Created in 2021-1-1 23:56
 * @description：
 * @modified By：
 * @version: $
 */
public class LevelExtendsTest {
    public static void main(String[] args) {
/*        如果一个给定的 logger 没有指定一个层级，那么它就会继承离它最近的一个祖先的层级。更正式的说法是：
    
        对于一个给定的名为 L 的 logger，它的有效层级为从自身一直回溯到 root logger，直到找到第一个不为空的层级作为自己的层级。
    
        为了确保所有的 logger 都有一个层级，root logger 会有一个默认层级 --- DEBUG
        */
        
        
        // ch.qos.logback.classic.Logger 可以设置日志的级别 ，不是 org.slf4j.Logger logger = LoggerFactory.getLogger("com.foo");
        // 获取一个名为 "com.foo" 的 logger 实例
        ch.qos.logback.classic.Logger logger = (ch.qos.logback.classic.Logger) LoggerFactory.getLogger("com.foo");
        // 设置 logger 的级别为 INFO
        logger.setLevel(Level.INFO);
        
        // 这条日志可以打印，因为 WARN >= INFO
        logger.warn("警告信息");
        // 这条日志不会打印，因为 DEBUG < INFO
        logger.debug("调试信息");
        
        // "com.foo.bar" 会继承 "com.foo" 的有效级别
        Logger barLogger = LoggerFactory.getLogger("com.foo.bar");
        // 这条日志会打印，因为 INFO >= INFO
        barLogger.info("子级信息");
        // 这条日志不会打印，因为 DEBUG < INFO
        barLogger.debug("子级调试信息");
    
        // "com"  不会会继承 "com.foo" 的有效级别，会继承"root"的默认debug级别
        Logger comLogger = LoggerFactory.getLogger("com");
        // 这条日志会打印，因为 INFO > DEBUG
        comLogger.info("父级信息");
        // 这条日志会打印，因为 DEBUG >= DEBUG
        comLogger.debug("父级调试信息");
        
    }
}
